package cn.wizzer.app.crown.modules.models;

import cn.wizzer.app.crown.modules.models.enums.MatchTypeEnum;
import cn.wizzer.app.crown.modules.models.enums.SubResultEnum;
import cn.wizzer.framework.base.model.BaseModel;
import lombok.Data;
import org.nutz.dao.entity.annotation.*;
import org.nutz.dao.interceptor.annotation.PrevInsert;

import java.io.Serializable;
import java.util.Objects;

/**
 * 比赛结果子表
 *
 * @author
 */
@Data
@Table("crown_sub_result")
@TableIndexes({@Index(name = "sub_match_id_and_tag_and_version", fields = {"matchId","tag","version"}, unique = true)})
public class CrownSubResult extends BaseModel implements Serializable {
    /**
     * 主键ID
     */
    @Column
    @Name
    @Comment("主键ID")
    @ColDefine(type = ColType.VARCHAR, width = 32)
    @PrevInsert(els = {@EL("uuid()")})
    private String id;

    /**
     * 赛事表ID
     */
    @Column("match_id")
    @Comment("赛事表ID")
    @ColDefine(type = ColType.VARCHAR, width = 32)
    private String matchId;

    /**
     * 比赛类型 足球FOOTBALL 篮球BASKETBALL
     */
    @Column
    @Comment("比赛类型")
    @ColDefine(type = ColType.VARCHAR, width = 32)
    private MatchTypeEnum gameType;

    /**
     * 赛果类型：进球数 其他赛果 角球数 角球顺序 罚牌数 点球进球数
     */
    @Column
    @Comment("赛果类型")
    @ColDefine(type = ColType.VARCHAR, width = 16)
    private SubResultEnum type;

    /**
     * 做为我们程序设计的标识 NO1 NO2 .........
     * 足球：
     * NO1 —— 上半场开场 - 14:59 分钟
     * NO2 —— 15:00 – 29:59 分钟
     * NO3 —— 30:00分钟 - 半场
     * NO4 —— 半场
     * NO5 —— 下半场开场 - 59:59 分钟
     * NO6 —— 60:00 – 74:59 分钟
     * NO7 —— 75:00分钟 - 全场完场
     * NO8 —— 全场
     *
     * 篮球：
     * NO1 —— 第一节
     * NO2 —— 第二节
     * NO3 —— 第三节
     * NO4 —— 第四节
     * NO5 —— 上半场
     * NO6 —— 下半场
     * NO7 —— 加时
     * NO8 —— 全场
     */
    @Column
    @Comment("标识")
    @ColDefine(type = ColType.VARCHAR, width = 8)
    private String tag;

    /**
     * 主队得分
     */
    @Column
    @Comment("主队得分")
    @ColDefine(type = ColType.VARCHAR, width = 12)
    private String resultH;


    /**
     * 客队得分
     */
    @Column
    @Comment("客队得分")
    @ColDefine(type = ColType.VARCHAR, width = 12)
    private String resultC;


    /**
     * 其他赛果
     */
    @Column
    @Comment("其他赛果")
    @ColDefine(type = ColType.VARCHAR, width = 48)
    private String resultO;


    /**
     * 备注(resultH、resultC、resultO的key，例如上半场开场 - 14:59 分钟、落后反超获胜等)
     */
    @Column
    @Comment("备注")
    @ColDefine(type = ColType.VARCHAR, width = 32)
    private String remark;

    /**
     * 版本号
     */
    @Column
    @Comment("版本号")
    private Integer version;


    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        CrownSubResult subResult = (CrownSubResult) o;
        return Objects.equals(matchId, subResult.matchId) &&
                Objects.equals(tag, subResult.tag) &&
                Objects.equals(resultH, subResult.resultH) &&
                Objects.equals(resultC, subResult.resultC) &&
                Objects.equals(resultO, subResult.resultO);
    }

    @Override
    public int hashCode() {
        return Objects.hash(matchId, tag, resultH, resultC, resultO);
    }
}
